約 2,612,954 件
https://w.atwiki.jp/gametips/pages/16.html
OpenGLに関連するオススメの本や WEB サイトを紹介します. ページ右の画像をクリックすると Amazon で参考文献を購入できます. OpenGL策定委員会, 「OpenGLプログラミングガイド 原著第5版」, ピアソンエデュケーション OpenGLの赤本(Red Book)と呼ばれる定番の参考書の日本語版です。 少し値は張りますがOpenGLの基本的な使い方が丁寧にまとめられています。 初心者の方には敷居が高いかもしれませんがOpenGLを極めるつもりなら必須の教本だと思います。 Mark Segal, Kurt Akeley, Jon Leech, 「OpenGL4.0グラフィックスシステム」, カットシステム OpenGLの仕様書の日本語訳です。個人的には翻訳に違和感を覚えることはありませんでした。 英語が苦手な方は本書をAPIリファレンスの代わりに利用できます。 チュートリアルのような内容は含まれていませんので他の書籍との併用をオススメします。 床井 浩平, 「GLUTによるOpenGL入門」, 工学社 これから OpenGL を初めようとしている方にはこの本がオススメです。 おそらく OpenGL に関する文献の中では最も敷居が低く 3DCG に関する知識が全くなくても理解しやすいです。 少し内容は古いかもしれませんが導入という目的では最高の文献で、私もこの本から OpenGL に入門しました。 床井 浩平, 「GLUTによるOpenGL入門2 テクスチャマッピング」, 工学社 上の「GLUT によるOpenGL入門」の続編です。 前作の内容では物足りなかった方は本書を読むことで 3DCG の表現力が大幅に広がります。 引き続き平易な内容となっており、前作を読破した方であれば難なく理解できると思います。 David Wolff , 「OpenGL 4.0 シェーディング言語 -実例で覚えるGLSLプログラミング-」, ボーンデジタル 最近のゲームに見られるようなリアルな映像をつくりだすにはプログラマブル・シェーダという機能が欠かせません。 床井 浩平さんの「GLUTによるOpenGL入門2 テクスチャマッピング」でもシェーダに関しては少しだけ触れられていますが、書籍の後半で軽く紹介されているだけでいささか物足りない内容ではありますので、本格的に学ぶためにこの本の購入をオススメします。
https://w.atwiki.jp/bambooflow/pages/312.html
OpenGLのはじめ Qt4.7.3 OpenGLのはじめプロジェクトファイルを作成する(GUIアプリケーション) QGLWidgetの追加 実行結果 まとめ プロジェクトファイルを作成する(GUIアプリケーション) 新規プロジェクトを作成します。 メニューのファイルから、「ファイル/プロジェクトの新規作成」を選択します。 プロジェクトから「Qtウィジェット プロジェクト」→「Qt GUI アプリケーション」を選択します。 「選択」をクリックします。 プロジェクト名はここでは"hellogl"とします。 プロジェクトパス名を適当に設定します。ここでは"qtwork"を作成します。 「次へ」をクリックします。 ターゲット設定、そのまま「次へ」をクリックします。 クラス情報、そのまま「次へ」をクリックします。 プロジェクト管理、そのまま「次へ」をクリックします。 QGLWidgetの追加 次にQGLWdigetを継承したクラスを作成します。 ここではクラス名を"GLWidget"とします。 ファイルから「ファイル/プロジェクトの新規作成」 ファイルとクラスから「C++」→「C++クラス」を選択 「選択」をクリックします。 クラス名に、ここでは"GLWidget"と入力します。 入力したら、「次へ」をクリックします。 #ref error :ご指定のファイルが見つかりません。ファイル名を確認して、再度指定してください。 (gl007.png) プロジェクト管理、そのまま「完了」をクリックします。 すると、次のようにglwidget.hとglwidget.cppが追加されます。 ただし、まだ空のクラスを追加したにすぎないため、ここからキーボードを使ってプログラムを作成します。 glwidget.hおよびglwidget.cppを以下のように記述修正します。 glwidget.h #ifndef GLWIDGET_H #define GLWIDGET_H #include QGLWidget class GLWidget public QGLWidget { Q_OBJECT public GLWidget(QWidget *parent = 0); ~GLWidget(); protected virtual void initializeGL(); virtual void resizeGL( int w, int h ); virtual void paintGL(); }; #endif // GLWIDGET_H glwidget.cpp #include "glwidget.h" GLWidget GLWidget(QWidget *parent) QGLWidget(parent) { } GLWidget ~GLWidget() { } void GLWidget initializeGL() { glClearColor(0.3, 0.3, 0.3, 1.0); } void GLWidget resizeGL( int w, int h ) { glViewport(0, 0, w, h); glLoadIdentity(); glOrtho( -w/200.0, w/200.0, -h/200.0, h/200.0, -1.0, 1.0); } void GLWidget paintGL() { glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glColor3d(1.0, 0.0, 0.0); glBegin(GL_POLYGON); glVertex2d(-0.5, -0.5); glVertex2d(0.5, -0.5); glVertex2d(0.5, 0.5); glVertex2d(-0.5, 0.5); glEnd(); //glFlush(); } 次がポイントです。 「クラスの格上げ」という機能を使ってユーザが作成したクラスをプロジェクトに組み込みます。 プロジェクト→フォームから"mainwindow.ui"をダブルクリックします。 するとウィンドウの右側にフォームの情報が表示されます。 "centralWidget"を右クリックして「クラスの格上げ指定」を選択します。 「格上げされたクラス名」に"GLWidget"と入力します。 入力したら「追加」ボタンをクリックします。 「格上げ」をクリックします。 これでユーザが作成した"GLWidget"が格上げされてプロジェクトに組み込まれました。 最後に、プロジェクトでOpenGLを使うので、 プロジェクトの"helllo.pro"を開き、「QT」の変数に"opengl"を追加します。 あとは、コンパイル&ビルドをするだけです。 実行結果 うまく実行できると、以下のような結果となります。 まとめ QtのバージョンがかわるごとにCreatorの使い方が微妙に変わってくるので、それに合わせて操作を覚えるのが大変です。 ただ、「格上げ」というのは便利なので、ぜひ覚えておきたい機能です。
https://w.atwiki.jp/soscomp/pages/108.html
GLUTによる「手抜き」OpenGL入門 和歌山大の先生が学生向けに書かれたものらしく、それなりにわかりやすい。 想像力をつけさせるためなのか、スクリーンショットが1枚もない。 RubyでOpenGL ruby-openglでお手軽3Dプログラミング ruby-openglで三角形を描画する 藤井研記録板 個別記事 更新・ツッコミページ glutTimerFunc モデルビュー変換 これらのサイトを参考にしながら和歌山大のチュートリアルをRuby語に翻訳しながら作ってみたのが以下のもの。 require "opengl" require "glut" display = proc { GL.Clear(GL COLOR_BUFFER_BIT) GL.Color3d(0.0, 0.0, 0.0) GL.Begin(GL LINES) #AB GL.Vertex3dv(0.0, 0.2, 0.0) GL.Vertex3dv(0.0, 0.0, 1.0) #AD GL.Vertex3dv(0.0, 0.2, 0.0) GL.Vertex3dv(-1.0, 0.0, 0.0) #AC GL.Vertex3dv(0.0, 0.2, 0.0) GL.Vertex3dv(1.0, 0.0, 0.0) #BD GL.Vertex3dv(0.0, 0.0, 1.0) GL.Vertex3dv(-1.0, 0.0, 0.0) #BC GL.Vertex3dv(0.0, 0.0, 1.0) GL.Vertex3dv(1.0, 0.0, 0.0) #CD GL.Vertex3dv(1.0, 0.0, 0.0) GL.Vertex3dv(-1.0, 0.0, 0.0) GL.End(); } resize = proc {|w,h| GL.Viewport(0, 0, w, h) GL.LoadIdentity() GLU.Perspective(30.0, w / h, 1.0, 100.0) GLU.LookAt(3.0, 3.0, 5.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0) } timer = proc { GL.Rotate(2.0, 0.0, 1.0, 0.0) GLUT.PostRedisplay() GLUT.TimerFunc(100, timer, 0) } GLUT.Init() GLUT.CreateWindow("ruby-opengl test") GLUT.DisplayFunc(display) GLUT.ReshapeFunc(resize) GL.ClearColor(0.5,0.5,0.5,0.0) GLUT.TimerFunc(100, timer, 0) GLUT.MainLoop() うすっぺらい三角錐がくるくるまわるよ! ・・・それだけ。 名前 コメント このページへのアクセス数 total - today - yesterday - このページのタグ一覧 OpenGL Ruby
https://w.atwiki.jp/gameswiki/pages/34.html
OpenGLで動作するゲームをプレイしたいが、古いPCで新しいOpenGLに対応していない際に使えるかもしれないライブラリ達 ※OpenGLのゲームが起動しても、正常に描画されない場合もあります。試してみて無理だった場合は、新しいPC(古くないなるべく新しいPC)を買いましょう。 オンラインゲームやそのサービス(主にSteam)等のオンラインプレイをこれらのOpenGLエミュレータを使用してプレイすると、バンされることがあります。オンラインプレイをする際は、消しましょう。 プロジェクト名 OpenGLのバージョン 備考 Mesa3D 3.x-4.x 要ビルド QindieGL 2.x OpenGLをDirect3D9でエミュレーションします。幾つかのゲーム(主にリンク先でサポートと書かれているゲーム)は動作しますが、動作しないものもあります。要レジストリ書き込み
https://w.atwiki.jp/nakamura001/pages/26.html
MacでのOpenGLプログラミング 開発環境の構築 開発環境の構築 入門 GLUTによる「手抜き」OpenGL入門 http //www.wakayama-u.ac.jp/~tokoi/opengl/libglut.html データ エラーコード ヘルプ OpenGL GLUT ツール・ライブラリ ツール・ライブラリ 資料 書籍 書籍(2) サイト
https://w.atwiki.jp/bambooflow/pages/250.html
ヒストリ 勉強のため整理。 知識不足なので、まずはバージョンごとにどんな機能が使えるのかをしるために。 ヒストリOpenGL 1.0 OpenGL 1.1対応カード 拡張 OpenGL 1.2対応カード 拡張 OpenGL 1.2.1対応カード 拡張 OpenGL 1.3対応カード 拡張 OpenGL 1.4対応カード 拡張 OpenGL 1.5対応カード 拡張 OpenGL 2.0対応カード 拡張 OpenGL 2.1対応カード 拡張 OpenGL 3.0対応カード 拡張 OpenGL 3.1対応カード OpenGL 3.2対応カード OpenGL 3.3 OpenGL 4.0 OpenGL 4.1 参考 OpenGL 1.0 1992年1月リリース OpenGL 1.1 1997年1月リリース GPUハードウェア上でテクスチャについてサポート。 対応カード すべて。 拡張 Extension Extension ID Functions 頂点配列 EXT_vertex_array glVertexPointer, glColorPointer, glNormalPointer ポリゴン・オフセット (depth biasing) EXT_polygon_offset glPolygonOffset RGBA混合 EXT_blend_logic_op glBlendFunc テクスチャ・コピー/Subコピー EXT_subtexture, EXT_copy_texture glTexSubImage1D/2D/3D テクスチャ・フォーマット EXT_texture RGB, LUMINANCE, ALPHA, INTENSITY (in glTexImage2D) テクスチャ・オブジェクト EXT_texture_object glGenTextures, glBindTextures OpenGL 1.2 1998年3月リリース ボリュームテクスチャ パックドピクセル normal rescaling clamped/edgeテクスチャ・サンプリング イメージ・プロセッシング 対応カード Rage 128 Rage 128 GL Rage XL/XC, Rage 128 Pro Rage Fury MAXX それ以降のカード 拡張 Extension Extension ID Functions 3D Volume Textures GL_EXT_texture3D glTexImage3DEXT BGRA Texture Format GL_EXT_bgra BGR_EXT, BGRA_EXT (in glTexImage2D) Packed Pixels GL_EXT_packed_pixels Normal Rescaling GL_EXT_rescale_normal Separate Specular Color GL_EXT_separate_specular_color Texture Coord Edge Clamping SGIS_texture_edge_clamp Texture LOD Control SGIS_texture_lod Draw Range Elements EXT_draw_range_elements glDrawRangeElements Image Processing Subset EXT_color_table, EXT_convolution, SGI_color_matrix, EXT_histogram, EXT_blend_color, EXT_blend_minmax OpenGL 1.2.1 1998年10月リリース multi-texture texture unit rendering pipeline 対応カード Radeon Radeon Mobility Radeon 7500 Mobility Radeon 8500 Radeon 9000 Radeon 9200 Radeon 9600 Radeon 9800 GeForce 3 GeForce 4Ti GeForce FX それ以降のカード 拡張 Extension Extension ID Functions マルチ・テクスチャリング SGIS_multitexture glActiveTextureARB, glClientActiveTextureARB OpenGL 1.3 2001年8月リリース cubemap texture multi-texturing multi-sampling texture unit combine opeerations(add, combine, dot3, border clamp) 対応カード Radeon 32/36 Radeon 64/7200 Radeon 7000 Radeon 7500 Radeon IGP 320M Radeon IGP 345M ES1000 Radeon 8500 Radeon 9000/Pro Radeon 9100/9200/9250 (Pro IGP) GeForce 3 GeForce 4Ti GeForce FX それ以降のカード 拡張 Extension Extension ID Functions Compressed Textures GL_ARB_texture_compression Cubemaps GL_EXT_texture_cube_map TEXTURE_CUBE_MAP_EXT Multi-Sampling GL_ARB_multisample Texture Add GL_ARB_texture_env_add Texture Combine GL_ARB_texture_env_combine Texture Dot3 GL_ARB_texture_env_dot3 Texture Border Clamping GL_ARB_texture_border_clamp Matrix Transpose GL_ARB_transpose_matrix OpenGL 1.4 2002年6月リリース hardware shadowing fog coordinates automatic mipmap generation additional texture mode 対応カード Quadro DCC Quadro4 380 XGL Quadro4 500XGL, 5500XGL Quadro4 700XGL, 750XGL Quadro4 900XGL, 980XGL それ以降のカード GMA 900 (910GL, 915GL, 915GV, 915G) GMA 950 (945GZ, 945GC, 945G, Mobile 945 Family) GMA 3000 (946GZ, Q963, Q965) 拡張 Extension Extension ID Functions Automatic Mipmaps SGIS_generate_mipmap Blend Squaring Functions GL_NV_blend_square Depth Textures GL_ARB_depth_texture DEPTH_COMPONENT16/24/32_ARB Hardware Shadowing Z-depth GL_ARB_shadow COMPARE_R_TO_TEXTURE Fog Coordinates GL_EXT_fog_coord Multiple Draw Arrays GL_EXT_multi_draw_arrays Point Parameters GL_ARB_point_parameter Secondary Color GL_EXT_secondary_color Separate Blend Functions GL_EXT_blend_func_separate Stencil Wrapping GL_EXT_stencil_wrap Texture Crossbar Environment Mode GL_ARB_texture_env_crossbar Texture LOD Bias GL_EXT_texture_lod_bias Texture Mirrored Repeat GL_ARB_texture_mirrored_repeat Window Raster Position GL_ARB_window_pos OpenGL 1.5 2003年6月リリース vertex buffer objects(VBO) occlusion queries extended shadowing function 対応カード Radeon X800 Radeon 9600 Radeon 9700 Radeon 9800 GeForce FX それ以降のカード GMA 3100 (Q33, Q35, G31, G33) GMA 3150 (Atom Dx10, N4x0) GMA X3100 (GL960, GLE960, GM965, GME965) 拡張 Extension Extension ID Functions VBOs Vertex Buffer Objects GL_ARB_vertex_buffer_object glBindBufferARB, glBufferDataARB, glGenBuffersARB Occlusion Queries GL_ARB_occlusion_query Extended Shadow Functions GL_EXT_shadow_funcs OpenGL 2.0 2004年9月リリース ARB呼び出しGPUベースassembly language ユーザ・プログラマブル・シェーダ バーテックス・シェーダ フラグメント・シェーダ 対応カード Radeon 9650 Radeon 9500 Radeon 9500/9550/9600/9700/9800 (Pro, SE, XT) Radeon X1050 Radeon Xpress 200/1100 Radeon X300 Radeon X550 Radeon X600/Pro Radeon X700 Radeon X800(VE, SE, GT, Pro) Radeon X850 Radeon Xpress 1250 Radeon X1200 Radeon X1250 Radeon 2100 Radeon X1300 Radeon X1550 Radeon X1600 Radeon X1650 Radeon X1800 Radeon X1900 Radeon X1950 (Pro, XT, GT) GeForce 6800 Quadro 600 Quadro FX 500 Quadro FX 700 Quadro FX 1000 Quadro FX 2000 Quadro FX 3000 Quadro FX 1400 Quadro FX 1500 Quadro FX 3450 Quadro FX 3500 Quadro FX 4500X2 Quadro FX 4500 SDI それ以降のカード GMA 500 (UL11L, US15L, US15W) GMA X3000 (G965) GMA X3500 (G35) 拡張 Extension Extension ID Functions Shader Objects GL_ARB_shader_objects Vertex Programs GL_ARB_vertex_program glBindProgramARB, glGenProgramsARB Vertex Shaders (VS) GL_ARB_vertex_shader Fragment Shaders (FS) GL_ARB_fragment_shader Multiple Render Targets GL_ARB_draw_buffers glDrawBuffers Rectangular Texture GL_ARB_texture_rectangle GL_TEXTURE_RECTANGLE_ARB Point Sprites GL_ARB_point_sprite Separate Blend Equation GL_EXT_blend_equation_separate Separate Stencil GL_EXT_stencil_two_side OpenGL 2.1 2006年6月リリース pixel buffer objects(PBO) sRGBテクスチャ(gamma-corrected textures) non-square matrices Shading Language GLSL 1.20 対応カード Radeon GD 2350 GeForce FX (with driver 175.19) GeForce 6000シリーズ Geforce 7000シリーズ GeForce Go 7000シリーズ Quadro FX 4000 Quadro FX 350 Quadro FX 550 Quadro FX 560 Quadro FX 1400 Quadro FX 1500 Quadro FX 5500 それ以降のカード GMA 4500 (B43, Q43, Q45) GMA X4500 (G41, G43) GMA X4500HD (G45) GMA 4500MHD (GL40, GS40, GM45, GS45) GMA Graphics GMA HD (Clarkdale GMCH Die Ironlake, Arrandale GMCH Die Ironlake) 拡張 Extension Extension ID Functions Non-Square Matricies glUniformMatrix{}fv PBOs Pixel Buffer Objects GL_ARB_pixel_buffer_object sRGB Texture (gamma 2.2) GL_EXT_texture_sRGB OpenGL 3.0 2008年6月リリース OpenGL Shading Language 1.30 (GLSL) Vertex Array Objects More flexible Framebuffer Objects 32-bit(single precision) floating-point textures and render buffers 16-bit(half precision) floating-point vertex and pixel data Ability to render vertex transformations into a buffer Texture arrays 32-bit(single precision) float point depth buffer support 対応カード Radeon HDシリーズ GeForce 8000, 9000 GTX 100 GTX 200 GTX 300シリーズ 拡張 Extension Extension ID Functions Geometry Shader (GS) GL_EXT_geometry_shader4 GEOMETRY_SHADER_EXT FBOs Frame Buffer Objects GL_EXT_framebuffer_object glFrameBufferTexture2DEXT FBO Multisampling GL_EXT_framebuffer_multisample Hardware Instancing GL_EXT_draw_instanced glDrawArraysInstancedEXT, glDrawElementsInstancedEXT VAOs Vertex Array Objects GL_ARB_vertex_array_object glBindVertexArray, glGenVertexArray sRGB Framebuffers (gamma 2.2 GL_EXT_framebuffer_sRGB FRAMEBUFFER_SRGB_EXT OpenGL 3.1 2009年5月 OpenGL Shading Language 1.40(GLSL) Texture Buffer Objects Uniform Buffer Object Signed normalized textures (+-1.0 range) A minimum of 16 texture units accessible by the vertex shader Primitive restart Instancing CopyGBuffer API 対応カード OpenGL 3.2 2009年8月 OpenGL Shading Language 1.50(GLSL) ジオメトリ・シェーダ BGRA vertex component ordering Shader Fragment coordinate convention control Seamless cube map filtering Fragment depth clamping Multisampled textures and texture samples for specific sample locations Sync and Fence objects 対応カード Radeon HD シリーズ GeForce 8000, 9000 GTX 100 GTX 200 GTX 300シリーズ OpenGL 3.3 OpenGL Shading Language 3.3(GLSL)このバージョンからOpenGLとGLSLのバージョンを合わせてきた OpenGL 4.0 OpenGL Shading Language 4.0(GLSL) DirextX11相当 OpenGL 4.1 OpenGL Shading Language 4.1(GLSL) 参考 http //en.wikipedia.org/wiki/OpenGL http //en.wikipedia.org/wiki/Intel_GMA
https://w.atwiki.jp/dendenkeroro/pages/52.html
ARToolkitを実現するにはOpenGLも習得しておく必要があります。 各種要素となるプログラムソースを公開しておきます。 開発環境はARToolkitを参照してください。 プログラミングに関してはARToolkitでも紹介した書籍、 および下記HP「NaturalScience」様を参考にしております。 そちらではソースの解説があまりないので、必要に応じて補足、コメントなどしています。 ただし、読者の方々にはC言語に関する基礎知識があるものとして説明しております。 (c)NaturalScience VisualStudio2010ではどう設定するの? VisualStudio2010が公開されましたね。2008とは若干仕様が変わりましたので、それを紹介します。 まずGLUTのインストールですが、glut.hをどこに置くかが問題になります。アドレスは以下の通り。 C \Program Files\Microsoft Visual Studio 10.0\Vc\Include\gl\glut.h glフォルダはデフォルトで存在しないので、自分で作ってください。 また、2010ではプロジェクトでのプロパティ設定のみとなっているので、 「インクルードディレクトリ」と「ライブラリディレクトリ」は「プロジェクトのプロパティ」から設定してください。 「VC++ディレクトリ」という項目が2010では新設されておりますので。 とりあえずWindowを表示してみよう(2010/5/5 編集中) まずはOpenGLでウィンドウを表示してみましょう。 かといって真っ白画面だと味気ないので、格子状の地面も表示します。 +←ソースを表示するにはこちらをクリック #include ‹math.h› #include ‹fstream› #include ‹sstream› #include ‹iostream› #include ‹direct.h› #include ‹GL/glut.h› int WindowPositionX = 400; //生成するウィンドウ位置のX座標 int WindowPositionY = 200; //生成するウィンドウ位置のY座標 int WindowWidth = 640; //生成するウィンドウの幅 int WindowHeight = 480; //生成するウィンドウの高さ char WindowTitle[] = ロボット視点 ; //ウィンドウのタイトル double ViewPointX = 0.0;//視点X座標 double ViewPointY = -300.0;//視点Y座標 double ViewPointZ = 50.0;//視点Z座標 //---------------------------------------------------- // 関数プロトタイプ(後に呼び出す関数名と引数の宣言) //---------------------------------------------------- void Initialize(void); void Display(void); void Idle(); void Ground(void); //地面の描画Keyboard //---------------------------------------------------- // メイン関数 //---------------------------------------------------- int main(int argc, char *argv[]){ glutInit(&argc, argv);//環境の初期化 glutInitWindowPosition(WindowPositionX, WindowPositionY);//ウィンドウの位置の指定 glutInitWindowSize(WindowWidth, WindowHeight); //ウィンドウサイズの指定 glutInitDisplayMode(GLUT_RGBA | GLUT_DEPTH | GLUT_DOUBLE);//ディスプレイモードの指定 glutCreateWindow(WindowTitle); //ウィンドウの作成 glutDisplayFunc(Display); //描画時に呼び出される関数を指定する(関数名:Display) glutIdleFunc(Idle); //プログラムアイドル状態時に呼び出される関数 Initialize(); //初期設定の関数を呼び出す glutMainLoop(); return 0; } //---------------------------------------------------- // 初期設定の関数 //---------------------------------------------------- void Initialize(void){ glClearColor(1.0, 1.0, 1.0, 1.0); //背景色 glEnable(GL_DEPTH_TEST);//デプスバッファを使用:glutInitDisplayMode() で GLUT_DEPTH を指定する } //---------------------------------------------------- // 描画の関数 //---------------------------------------------------- void Display(void) { glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); //バッファの消去 //透視変換行列の設定------------------------------ glMatrixMode(GL_PROJECTION);//行列モードの設定(GL_PROJECTION 透視変換行列の設定、GL_MODELVIEW:モデルビュー変換行列) glLoadIdentity();//行列の初期化 gluPerspective(30.0, (double)WindowWidth/(double)WindowHeight, 0.1, 1000.0); //透視投影法の視体積gluPerspactive(th, w/h, near, far); //視点の設定------------------------------ gluLookAt( ViewPointX, ViewPointY, ViewPointZ, // 視点の位置x,y,z; 0.0, 0.0, ViewPointZ, // 視界の中心位置の参照点座標x,y,z 0.0, 0.0, 1.0 ) ; //視界の上方向のベクトルx,y,z //---------------------------------------- //モデルビュー変換行列の設定-------------------------- glMatrixMode(GL_MODELVIEW);//行列モードの設定(GL_PROJECTION 透視変換行列の設定、GL_MODELVIEW:モデルビュー変換行列) glLoadIdentity();//行列の初期化 glViewport(0, 0, WindowWidth, WindowHeight); //---------------------------------------------- glEnd(); glPopMatrix(); Ground();//地面描画 glutSwapBuffers(); //glutInitDisplayMode(GLUT_DOUBLE)でダブルバッファリングを利用可 } //---------------------------------------------------- // アイドル時に呼び出される関数 //---------------------------------------------------- void Idle(){ glutPostRedisplay(); //glutDisplayFunc()を1回実行する } //---------------------------------------------------- // 地面の描画(格子) //---------------------------------------------------- void Ground(void){ double ground_max_x = 500.0;//x方向広さ double ground_max_y = 500.0;//y方向広さ glColor3d(0.5, 0.5, 1.0); // 大地の色 glBegin(GL_LINES); for(double ly = -ground_max_y ;ly = ground_max_y; ly+=10.0){ glVertex3d(-ground_max_x, ly,0); glVertex3d(ground_max_x, ly,0); } for(double lx = -ground_max_x ;lx = ground_max_x; lx+=10.0){ glVertex3d(lx, ground_max_y,0); glVertex3d(lx, -ground_max_y,0); } glEnd(); } 下のようなウィンドウが実行されたでしょうか? 真っ白なウィンドウを表示するだけなら↓のソースで可能です。 +←表示するにはこちらをクリック #include ‹GL/glut.h› int WindowPositionX = 100; //生成するウィンドウ位置のX座標 int WindowPositionY = 100; //生成するウィンドウ位置のY座標 int WindowWidth = 512; //生成するウィンドウの幅 int WindowHeight = 512; //生成するウィンドウの高さ char WindowTitle[] = 世界の始まり ;//ウィンドウのタイトル //---------------------------------------------------- // 関数プロトタイプ(後に呼び出す関数名と引数の宣言) //---------------------------------------------------- void Initialize(void); void Display(void); //---------------------------------------------------- // メイン関数 //---------------------------------------------------- int main(int argc, char *argv[]){ glutInit(&argc, argv);//環境の初期化 glutInitWindowPosition(WindowPositionX, WindowPositionY);//ウィンドウの位置の指定 glutInitWindowSize(WindowWidth, WindowHeight); //ウィンドウサイズの指定 glutInitDisplayMode(GLUT_RGBA | GLUT_DEPTH | GLUT_DOUBLE);//ディスプレイモードの指定 glutCreateWindow(WindowTitle); //ウィンドウの作成 glutDisplayFunc(Display); //描画時に呼び出される関数を指定する(関数名:Display) Initialize(); //初期設定の関数を呼び出す glutMainLoop(); return 0; } //---------------------------------------------------- // 初期設定の関数 //---------------------------------------------------- void Initialize(void){ glClearColor(1.0, 1.0, 1.0, 1.0); //背景色 glEnable(GL_DEPTH_TEST);//デプスバッファを使用:glutInitDisplayMode() で GLUT_DEPTH を指定する } //---------------------------------------------------- // 描画の関数 //---------------------------------------------------- void Display(void) { glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); //バッファの消去 glutSwapBuffers(); //glutInitDisplayMode(GLUT_DOUBLE)でダブルバッファリングを利用可 } ここでのキーワードは以下の通りです。 プログラムの全体的流れの把握 視点という概念 地面の描写 地面の上に立方体を表示して、視点を変えてみよう(2010/5/5 編集中) 地面だけでは味気ないですね。さて、実際に物体、ここでは立方体を描写しましょう。 ソースはこちらです。 下のようなウィンドウが実行されたでしょうか? ここでのキーワードは以下の通りです。 視点の移動 オブジェクトの描画 マウスドラッグで立方体をグリグリ回してみよう(2010/5/5 編集中) キーボード入力をしてみよう(2010/5/5 編集中) ここではキーボードからの入力によって視点(ViewPoint)を変えてみましょう。 下記のソースを実行すると下図のようなウィンドウが開きます。 キー操作は「a,s,d,wがそれぞれ左、下、右、上」「qが終了」となっています。 +←ソースを表示するにはこちらをクリック #include ‹math.h› #include ‹fstream› #include ‹sstream› #include ‹iostream› #include ‹direct.h› #include ‹GL/glut.h› double PI = acos(-1.0); int WindowPositionX = 400; //生成するウィンドウ位置のX座標 int WindowPositionY = 200; //生成するウィンドウ位置のY座標 int WindowWidth = 640; //生成するウィンドウの幅 int WindowHeight = 480; //生成するウィンドウの高さ char WindowTitle[] = ロボット視点ぐりぐり ; //ウィンドウのタイトル double ViewPointX = 0.0; double ViewPointY = -200.0; double ViewPointZ = 50.0; int tn = 0,zn=50 ; double t = 0; double dt = 0.1; double omega = 2.0 * PI / 20.0; //---------------------------------------------------- // 立方体の定義 //---------------------------------------------------- GLdouble vertex[][3] = { { -10.0, -10.0, 0.0 }, { 10.0, -10.0, 0.0 }, { 10.0, 10.0, 0.0 }, { -10.0, 10.0, 0.0 }, { -10.0, -10.0, 20.0 }, { 10.0, -10.0, 20.0 }, { 10.0, 10.0, 20.0 }, { -10.0, 10.0, 20.0 } },; int face[][4] = {//面の定義 { 0, 1, 2, 3 }, { 1, 5, 6, 2 }, { 5, 4, 7, 6 }, { 4, 0, 3, 7 }, { 4, 5, 1, 0 }, { 3, 2, 6, 7 }, } GLdouble normal[][3] = {//面の法線ベクトル { 0.0, 0.0,-1.0 }, { 1.0, 0.0, 0.0 }, { 0.0, 0.0, 1.0 }, {-1.0, 0.0, 0.0 }, { 0.0,-1.0, 0.0 }, { 0.0, 1.0, 0.0 }, } //---------------------------------------------------- // 物質質感の定義 //---------------------------------------------------- struct MaterialStruct { GLfloat ambient[4]; GLfloat diffuse[4]; GLfloat specular[4]; GLfloat shininess; } //jade(翡翠) MaterialStruct ms_jade = { {0.135, 0.2225, 0.1575, 1.0}, {0.54, 0.89, 0.63, 1.0}, {0.316228, 0.316228, 0.316228, 1.0}, 12.8} //---------------------------------------------------- // 色の定義の定義 //---------------------------------------------------- GLfloat green[] = { 0.2, 0.8, 0.2, 1.0 }//緑色 GLfloat shininess = 30.0;//光沢の強さ //----------------------------------------- //---------------------------------------------------- // 関数プロトタイプ(後に呼び出す関数名と引数の宣言) //---------------------------------------------------- void Initialize(void); void Display(void); void Idle(); void Ground(void); //大地の描画 void Keyboard(unsigned char key, int x, int y); //---------------------------------------------------- // メイン関数 //---------------------------------------------------- int main(int argc, char *argv[]){ glutInit(&argc, argv);//環境の初期化 glutInitWindowPosition(WindowPositionX, WindowPositionY);//ウィンドウの位置の指定 glutInitWindowSize(WindowWidth, WindowHeight); //ウィンドウサイズの指定 glutInitDisplayMode(GLUT_RGBA | GLUT_DEPTH | GLUT_DOUBLE);//ディスプレイモードの指定 glutCreateWindow(WindowTitle); //ウィンドウの作成 glutDisplayFunc(Display); //描画時に呼び出される関数を指定する(関数名:Display) glutKeyboardFunc(Keyboard);//キーボード入力時に呼び出される関数を指定する(関数名:Keyboard) glutIdleFunc(Idle); //プログラムアイドル状態時に呼び出される関数 Initialize(); //初期設定の関数を呼び出す glutMainLoop(); return 0; } //---------------------------------------------------- // 初期設定の関数 //---------------------------------------------------- void Initialize(void){ glClearColor(0.6, 0.6, 0.9, 1.0); //背景色 glEnable(GL_DEPTH_TEST);//デプスバッファを使用:glutInitDisplayMode() で GLUT_DEPTH を指定する //光源の設定-------------------------------------- GLfloat light_position0[] = { -50.0, -50.0, 20.0, 1.0 }//光源0の座標 glLightfv(GL_LIGHT0, GL_POSITION, light_position0); //光源0を } //---------------------------------------------------- // 描画の関数 //---------------------------------------------------- void Display(void) { glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); //バッファの消去 t = dt * tn;//tnは後ほどインクリメントされる ViewPointX = -100.0 * cos( omega * t);//立方体の周りをぐるぐる視点が回転する ViewPointY = -100.0 * sin( omega * t);//Z軸方向から見ると回転運動 ViewPointZ = 50+zn; //Z軸方向から見ると回転運動 //透視変換行列の設定------------------------------ glMatrixMode(GL_PROJECTION);//行列モードの設定(GL_PROJECTION 透視変換行列の設定、GL_MODELVIEW:モデルビュー変換行列) glLoadIdentity();//行列の初期化 gluPerspective(30.0, (double)WindowWidth/(double)WindowHeight, 0.1, 1000.0); //透視投影法の視体積gluPerspactive(th, w/h, near, far); //視点の設定------------------------------ gluLookAt( ViewPointX, ViewPointY, ViewPointZ, // 視点の位置x,y,z; 0.0, 0.0, 0.0, // 視界方向 0.0, 0.0, 1.0 ) ; //重力方向、要するに「上・空」はどっち? //---------------------------------------- //モデルビュー変換行列の設定-------------------------- glMatrixMode(GL_MODELVIEW);//行列モードの設定(GL_PROJECTION 透視変換行列の設定、GL_MODELVIEW:モデルビュー変換行列) glLoadIdentity();//行列の初期化 glViewport(0, 0, WindowWidth, WindowHeight); //---------------------------------------------- //陰影ON----------------------------- glEnable(GL_LIGHTING); glEnable(GL_LIGHT0);//光源0を利用 //----------------------------------- //立方体 glPushMatrix(); glMaterialfv(GL_FRONT, GL_AMBIENT, ms_jade.ambient); glMaterialfv(GL_FRONT, GL_DIFFUSE, ms_jade.diffuse); glMaterialfv(GL_FRONT, GL_SPECULAR, ms_jade.specular); glMaterialfv(GL_FRONT, GL_SHININESS, &ms_jade.shininess); glTranslated(0.0, 0.0, 0.0);//平行移動値の設定 glBegin(GL_QUADS); for (int j = 0; j 6; ++j) { glNormal3dv(normal[j]); //法線ベクトルの指定 for (int i = 0; i 4; ++i) { glVertex3dv(vertex[face[j][i]]); } } glEnd(); glPopMatrix(); //陰影OFF----------------------------- glDisable(GL_LIGHTING); //----------------------------------- Ground(); glutSwapBuffers(); //glutInitDisplayMode(GLUT_DOUBLE)でダブルバッファリングを利用可 } //---------------------------------------------------- // アイドル時に呼び出される関数 //---------------------------------------------------- void Idle(){ glutPostRedisplay(); //glutDisplayFunc()を1回実行する } //---------------------------------------------------- // 地面の描画 //---------------------------------------------------- void Ground(void){ double ground_max_x = 500.0; double ground_max_y = 500.0; glColor3d(0.8, 0.8, 0.8); // 大地の色 glBegin(GL_LINES); for(double ly = -ground_max_y ;ly = ground_max_y; ly+=10.0){ glVertex3d(-ground_max_x, ly,0); glVertex3d(ground_max_x, ly,0); } for(double lx = -ground_max_x ;lx = ground_max_x; lx+=10.0){ glVertex3d(lx, ground_max_y,0); glVertex3d(lx, -ground_max_y,0); } glEnd(); } //---------------------------------------------------- // キーボード入力時に呼び出される関数 //---------------------------------------------------- void Keyboard(unsigned char key, int x, int y){ switch ( key ) { case a //「a」を押したら反時計回り tn--; break; case d //「d」を押したら時計回り tn++; break; case w //「w」を押したら視点上昇 zn++; break; case s //「s」を押したら視点下降 zn--; break; case q //「q」を押したら終了 exit(0); break; default break; } } 文字の表示をしてみよう(2010/5/5 編集中) ウィンドウ映像をビットマップで紙芝居的に保存しよう(2010/5/5 編集中) ゲームパッド(コントローラ)で入力してみよう(2010/5/5 編集中) 半透明な物体を表現してみよう(2010/5/5 編集中) 動く笑い男を表示してみよう(2010/5/5 編集中)
https://w.atwiki.jp/bambooflow/pages/196.html
OpenGL/glut使い方メモ API VCEE
https://w.atwiki.jp/bambooflow/pages/277.html
OpenGL4.x OpenGL4.x系の処理を記載する。
https://w.atwiki.jp/tsukune/pages/201.html
General Scene の初期設定に二つのレンダリング・オプション、OpenGL(オープン・GL)とSoftware(ソフトウェア)がありました。違いを説明します。 Software: デフォルトのレンダラーです。ハードウェアによる高速化はありませんが、多くの場合、こちらの方が高速かつ頼りになるレンダラーです。OpenGLモードを試してみてこちらより良い結果を得られなければ、こちらをお使いください。 OpenGL Carraraは進化版テクスチャ・モードと同等のアルファチャンネル付きテクスチャマップをサポートした先進のOpenGLエンジンを装備しています。この機能はポリゴン・モデラーで多量のメッシュを編集する際にも力を発揮します。このレンダラーは3Dオブジェクトの描画にビデオカードのOpenGL APIを使うので、お持ちのビデオカードがOpenGLをサポートしていれば、より高いパフォーマンスを発揮します。ですが、市場に出ている既存の多くのビデオカードはまだフルサポートはしていません。その場合はソフトウェア・レンダラーの方がよりよい再描画速度を示すので、そちらをお使いください。 OpenGLレンダラーは3Dオブジェクトの描画を高速化するためにグラフィックカードを使います。ほとんどのシステム構成で動作するようにしてあるものの、OpenGLによる所要性能があります。 またOpenGLレンダラーは最新版のグラフィック・ドライバーが必要です。(グラフィック・ドライバーとはオペレーティング・システムとグラフィック・ハードウェアをインターフェースするソフトウェアです)。 グラフィック・ドライバのアップデートをするには、グラフィック・カードのメーカか、コンピュータのメーカにコンタクトしてください。通常、必要な最新版のドライバはメーカのWebサイトからダウンロードできます。 以上に加えて、OpenGLレンダラーの設定として以下のオプションを初期設定ダイアログで選択できます。 030-9.jpg Display lists(ディスプレイ・リスツ)機能を有効にするには、 1.File ⇒ Preferences 2.プルダウンからOpenGLを選択 3.Use Display Listsにチェック。これで既存オブジェクトの形状をグラフィックカード内にキャッシュすることができます。オブジェクトの表示速度を向上しますが、ビデオ・ドライバによっては問題を起こすことがあります。ですからこの設定をチェックする前に、作業中のシーンやレンダリング画像など、大切なものは残らずセーブしておくようにしてください 。